print(3 ** 4)  # 讲运算符的，**是幂运算符
print(11 // 2)  # 整除取余
print(-11 // -2)  # 结果为5，负负得正

print(-9 / 3)  # 结果为-3.0，浮点类型
a = -9 / 3
print(a, type(a))

print(9 // -4)  # 结果为-3
print(-9 // 4)  # 结果为-3，一正一负的整数公式，向下取整。

print(-9 % 4)  # 结果为3
print(9 % -4)  # 结果为-3，对于一正一负的取余公式：  余数=被除数-除数*商这里的商指的是 9//-4之后的结果，值为-3

# 赋值运算符
a = b = c = 16  # 链式赋值，地址都一样
d = 16
print(a, id(a))
print(b, id(b))
print(c, id(c))
print(d, id(d))

a, b, c = 10, 20, 30  # 解包赋值，该方式可以运用于值的交换，可以省去中间变量
print(a, b, c)
a, b = b, a  # 交换ab的值
print(a, b)

# 比较运算符的结果为bool类型，True or False
# > < >= <= != ==
print(b < a)  # 结果为True

# ==，比较的是两者的值value
# is，比较的是两者的标识id
a = 10
b = 10
print(a == b)
print(a is b)
a1 = [11, 22, 33]
print(a1)
a2 = [11, 22, 33]
print(a2)
print(a1 == a2)
print(a1 is a2)  # 这个显示的是False，因为数组a1和数组a2虽然值是相同的，但是使用的地址不同
print(a1 is not a2)  # 结果为True

# bool运算符（布尔运算符）,有点逻辑运算符的意思
# and,or,not,in,not in
a, b = 1, 2
c = False
d = 0
print(a, b)
print(a == 1 and b == 2)  # 结果为True,与运算，逻辑门中的与门，两真才真，一假即假
print(a == 1 or b == 3)  # 结果为True，或运算，有真即真
print(not c)
print(not a)
print(not d)  # 非零即为真
e = 'hello world'
print('------------------------------------')
print('k' in e)  # False
print('k' not in e)  # Ture
print('h' in e)  # 结果为真

# 位运算符，对数据二进制代码的逐位运算
print('--------------------------------------')
print(4 & 8)  # 逐位相与 0000 0100与上0000 1000 结果为0000 0000  0
print(4 | 8)  # 逐位相或 0000 0100或上0000 1000 结果为0000 1100  12
# 移位运算符 左移：<<,右移：>>
print(5 << 1)  # 0000 0110 左移一位为 0000 1100 高位截断，低位补零
print(5 << 3)  # 左移三位
print(5 >> 2)  # 右移两位，高位补零，低位截断

#运算符的优先级（括号的优先级最高，有括号先括号）
#算术运算符（幂运算优先，先加减，后乘除）>位运算符（移位优先，先与&后或|）>比较运算符（从左到右）>布尔运算符（先and后or）>赋值运算符
